home *** CD-ROM | disk | FTP | other *** search
-
- *-------------------------------------------------------*
-
- COMMENT HEAD=7
-
- *-------------------------------------------------------*
-
- trap1 = $84
- trap2 = $88
- trap13 = $B4
- trap14 = $B8
-
- *-------------------------------------------------------*
-
- *-------------------------------------------------------*
- rsset -12
- *-------------------------------------------------------*
- xbra_tag rs.l 1
- xbra_id rs.l 1
- xbra_ptr rs.l 1
-
- *-------------------------------------------------------*
-
- push macro
- move.\0 \1,-(sp)
- endm
-
- pop macro
- move.\0 (sp)+,\1
- endm
-
- *-------------------------------------------------------*
-
- *-------------------------------------------------------*
- bubble:
- *-------------------------------------------------------*
- * Local stack *
- *-------------------------------------------------------*
- lea usp_stack,sp
- *-------------------------------------------------------*
- * Enter supervisor mode *
- *-------------------------------------------------------*
- pea ssp_stack
- push.w #32
- trap #1
- addq.l #6,sp
- move.l d0,os_stack
- *-------------------------------------------------------*
- * Bubble trap vectors *
- *-------------------------------------------------------*
- lea trap1.w,a2
- bsr bubble_xbra
- *-------------------------------------------------------*
- exit_program:
- *-------------------------------------------------------*
- * User mode *
- *-------------------------------------------------------*
- push.l os_stack
- push.w #32
- trap #1
- addq.l #6,sp
- *-------------------------------------------------------*
- * Terminate *
- *-------------------------------------------------------*
- clr.w -(sp)
- trap #1
-
- *---------------------------------------------------------------*
- bubble_xbra:
- *---------------------------------------------------------------*
- move.l a2,a1
- *---------------------------------------------------------------*
- * Search for XBRA patch *
- *---------------------------------------------------------------*
- .look: move.l (a1),d0
- beq.s .done
- move.l d0,a0
- *---------------------------------------------------------------*
- * Check for premature end of XBRA chain *
- *---------------------------------------------------------------*
- cmp.l #'XBRA',xbra_tag(a0)
- bne.s .done
- cmp.l #'_DOS',xbra_id(a0)
- beq.s .done
- *---------------------------------------------------------------*
- * Check for ToolKit *
- *---------------------------------------------------------------*
- cmp.l #'TK40',xbra_id(a0)
- beq.s .got
- *---------------------------------------------------------------*
- * Next link in chain *
- *---------------------------------------------------------------*
- lea xbra_ptr(a0),a1
- bra.s .look
- *---------------------------------------------------------------*
- * a0 = XBRA patch address *
- * a1 = XBRA patch address pointer (previous XBRA) *
- *---------------------------------------------------------------*
- * Remove XBRA patch *
- *---------------------------------------------------------------*
- .got: move.l xbra_ptr(a0),(a1)
- *---------------------------------------------------------------*
- * Re-install XBRA patch *
- *---------------------------------------------------------------*
- move.l (a2),xbra_ptr(a0)
- move.l a0,(a2)
- *---------------------------------------------------------------*
- .done: rts
-
- *---------------------------------------------------------------*
- bss
- *---------------------------------------------------------------*
-
- os_stack: ds.l 1
-
- ds.b 1024
- usp_stack: ds.l 1
-
- ds.b 1024
- ssp_stack: ds.l 1
-
- *---------------------------------------------------------------*
-